package safari.controller.faq;

import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import safari.model.common.ListVO;
import safari.model.faq.FAQBoardVO;
import safari.model.faq.FAQServiceImpl;

public class FAQController extends MultiActionController {
	private FAQServiceImpl service;
	
	public FAQController(FAQServiceImpl service) {
		super();
		this.service = service;
	}
	
	/**
	 * 	게시판에 글 등록 method
	 * insert를 한 후 
	 * 등록한 글번호를 get한 뒤 
	 * redirect로 상세보기 메서드 호출
	 */
	public ModelAndView writeBoard(HttpServletRequest request, HttpServletResponse response, HttpSession session, FAQBoardVO fvo) throws SQLException{
		//session 유지 여부를 판단하여 두가지 경로로 진행
		String path = "";
		//session이 null이 아니면
		if(session.getAttribute("userInfo")!=null){
			//faq 글을 insert 한다.
			service.writeBoard(fvo);
			System.out.println("faq write success!! "+fvo);
			//insert 된 글의 글번호를 no에 할당
			int no = fvo.getNo();
			//글번호로 글정보를 가져오는 메서드를 호출
			path = "redirect:/faq.do?command=getBoardByNo&no="+no;
			//session이 null이면
		}else{
			//member controller의 main으로 이동시키는 메서드로 redirect
			path = "redirect:/member.do?command=home";
		}
	

		return new ModelAndView(path);
	}
	
	/**
	 * 글 삭제 method
	 */
	public String deleteBoard(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws SQLException{
		String path = "";
		//글번호를 받아온다
		int no = Integer.parseInt(request.getParameter("no"));
		//session이 null이 아니면
		if(session.getAttribute("userInfo")!=null){
			//글번호로 게시글을 삭제한다
			service.deleteBoard(no);
			System.out.println("delete complete!! "+no+"th content");
			//faq의 main으로 이동
			path="faql/main";
			//session이 null이면
		}else{
			//member controller의 main으로 이동시키는 메서드로 redirect
			path = "redirect:/member.do?command=home";
		}
		
		return path;
	}

	/**
	 * 업데이트를 수행하는 method
	 */
	public ModelAndView updateBoard(HttpServletRequest request, HttpServletResponse response, HttpSession session, FAQBoardVO fvo) throws SQLException{
		String path = "";
		//session이 null이 아니면
		if(session.getAttribute("userInfo")!=null){
			//작성한 내용으로 업데이트
			service.updateBoard(fvo);
			System.out.println("faq update:"+fvo);
			//해당 글 번호를 갖고 온다
			int no = fvo.getNo();
			//글번호로 글 내용을 불러오는 메서드로 redirect
			path = "redirect:/faq.do?command=getBoardByNo&no="+no;
		}else{
			//member controller의 main으로 이동시키는 메서드로 redirect
			path = "redirect:/member.do?command=home";
		}
	
		return new ModelAndView(path);
	}
	
	/**
	 * 글번호로 게시물 조회
	 */
	public ModelAndView getBoardByNo(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//글번호를 request
		int no = Integer.parseInt(request.getParameter("no"));
		//글번호로 조회 후 VO에 할당
		FAQBoardVO fvo = service.getBoardByNo(no);
		System.out.println("read detail "+fvo);
		
		//상세보기 페이지로 이동
		return new ModelAndView("faq/content", "fvo", fvo);
	}

	/**
	 * 모든 게시물을 보여주는 method
	 */
	public ModelAndView getAllBoard(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		/*int page = Integer.parseInt(request.getParameter("page"));*/
		//List 타입으로 조회한 전체 게시물을 할당
		ListVO lvo= service.getAllBoard();
		System.out.println("All FAQ List "+lvo);
		//전체 카테고리를 보여주는 페이지로 이동
		return new ModelAndView("/faq/category/categoryAll","lvo",lvo);
	}
	
	/**
	 * 카테고리로 게시물 찾기
	 */
	public ModelAndView findBoardByCategory(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		String path="";
		//category를 request
		String category=request.getParameter("category");
		//category로 검색한 결과를 List 타입으로 할당
		ListVO lvo=service.findBoardByCategory(category);
		/*
		 * category에 따라 path를 지정
		 */
		if(category.equals("가입/탈퇴")){
			path="/faq/category/categoryJoin&Drop";
		}
		else if(category.equals("개인정보")){
			path="/faq/category/categoryUserInfo";
		}
		else if(category.equals("물품 판매")){
			path="/faq/category/categorySellProduct";
		}
		else if(category.equals("물품 구매")){
			path="/faq/category/categoryBuyProduct";
		}
		else if(category.equals("포인트 결제")){
			path="/faq/category/categoryPayPoint";
		}
		else if(category.equals("게시판 이용")){
			path="/faq/category/categoryUseBoard";
		}
		else if(category.equals("기타")){
			path="/faq/category/categoryEtc";
		}
		System.out.println("find [category] "+lvo);
		return new ModelAndView(path,"lvo",lvo);
	}

	/**
	 * FAQ 리스트 페이지로 이동시키는 method
	 */
	public String moveToFAQList(HttpServletRequest request, HttpServletResponse response){
		return "faq/main";
	}

	/**
	 * FAQ 작성 페이지로 이동시키는 method
	 */
	public String moveToFAQWrite(HttpServletRequest request, HttpServletResponse response){
		return "faq/write";
	}
	
	/** 
	 * 업데이트 페이지로 이동하는 method
	 */
	public ModelAndView moveToUpdateBoard(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//글번호를 request
		int no = Integer.parseInt(request.getParameter("no"));
		//업데이트 페이지로 이동, 해당 글의 정보를 가지고 이동한다.
		return new ModelAndView("faq/update","fvo", service.getBoardByNo(no));
	}
}
